# -*-coding: Utf-8 -*-
# @File : teacher .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time：2023/6/12

'''
讲师视图层
'''
import interface.common_interface
from lib import common
from interface import common_interface, teacher_interface

login_user_teacher = {
    'username': None,
}


# 登录功能
def login():
    while True:
        # （1）用户层输入用户名和密码
        username_teacher = input('请输入你的讲师姓名:>>>>').strip()
        password_teacher = input('请输入你的密码:>>>>').strip()
        login_code = common.get_verify_code(4)
        login_code_input = input(f'请输入验证码进行登陆::>>{login_code}::>>').strip()

        # （2）调用学生接口层中的登陆接口
        flag, msg = teacher_interface.teacher_login_interface(username_teacher, password_teacher, login_code,
                                                              login_code_input)

        # （3）对反馈的结果进行打印输出
        if flag:
            print(msg)
            # 记录当前登陆的用户名
            login_user_teacher['username'] = username_teacher
            break
        else:
            print(msg)


# 查看全部课程
@common.auth('teacher')
def check_courses():
    # （1）调用讲师查看课程接口
    flag, teacher_course_list = teacher_interface.teacher_check_courses_interface(login_user_teacher['username'])
    if not flag:
        print(teacher_course_list)
    else:
        for course in teacher_course_list:
            print(f'当前讲师教授的课程为 :>>>{course}')


# 选择教授课程
@common.auth('teacher')
def choose_course():
    while True:
        # (1) 先选择学校，再进行选择课程
        # 获取所有学校列表
        flag, school_list = interface.common_interface.get_all_school_interface()

        # (2) 判断返回的结果是否存在  ----  学校不存在的时候返回假 取反做真则打印提示语学校不存在
        if not flag:
            print(school_list)
            break

        # 循环打印学校编号及列表
        for index, school_name in enumerate(school_list):
            print(f'当前学校编号:>>>{index}  当前学校名称:>>>{school_name}')

        # 打印完学校列表让讲师进行学校选择
        choice_school = input('请输入选择的学校编号:>>>>').strip()

        if choice_school == 'q':
            break

        if not choice_school.isdigit():
            print(f'请确认输入的信息!!')
            continue

        choice_school = int(choice_school)

        if choice_school not in range(len(school_list)):
            flow = f'请输入正确的学校编号!!'
            continue

        # 开始调用讲师接口进行学校选择
        # 拿到选择的学校的名字
        school_name = school_list[choice_school]
        # （2） 打印所选学校的所有课程
        flag_from_school, courses_list_from_school = common_interface.get_all_course_from_school_interface(school_name)
        if not flag_from_school:
            print(courses_list_from_school)
        else:
            # 循环打印课程编号及列表
            for index_course, course_name in enumerate(courses_list_from_school):
                print(f'当前课程编号:>>>{index_course}  当前课程名称:>>>{course_name}')

        # 打印完课程列表让讲师进行课程选择
        choice_course = input('请输入选择的课程编号:>>>>').strip()

        if choice_course == 'q':
            break

        if not choice_course.isdigit():
            print(f'请确认输入的信息!!')
            continue

        choice_course = int(choice_course)

        if choice_course not in range(len(courses_list_from_school)):
            flow = f'请输入正确的课程编号!!'
            continue

        # 开始调用讲师接口进行课程选择
        # 拿到选择的学校对应的课程的名字
        course_name = courses_list_from_school[choice_course]

        # （3） 调用讲师选择教授的接口，保存课程
        flag_add, msg_add = teacher_interface.add_course_interface(login_user_teacher['username'], course_name)
        if flag_add:
            print(msg_add)
            break
        else:
            print(msg_add)


# 查看课程内的学生
@common.auth('teacher')
def check_course_students():
    while True:
        # （1） 获取当前老师下所有的课程
        # （1）调用讲师查看课程接口
        flag, teacher_course_list = teacher_interface.teacher_check_courses_interface(login_user_teacher['username'])
        if not flag:
            print(teacher_course_list)

        # 循环打印课程编号及列表
        for index_course, course_name in enumerate(teacher_course_list):
            print(f'当前课程编号:>>>{index_course}  当前课程名称:>>>{course_name}')

        # （2） 打印所有课程让老师选择
        choice_course = input('请输入选择的课程编号:>>>>').strip()

        if choice_course == 'q':
            break

        if not choice_course.isdigit():
            print(f'请确认输入的信息!!')
            continue

        choice_course = int(choice_course)

        if choice_course not in range(len(teacher_course_list)):
            flow = f'请输入正确的课程编号!!'
            continue

        # 开始调用讲师接口进行课程选择
        # 拿到选择的学校对应的课程的名字
        course_name = teacher_course_list[choice_course]

        # （3） 根据选择的课程获取对应的学生列表
        flag_student_list, student_list_from_teacher = teacher_interface.get_all_course_students(
            login_user_teacher['username'], course_name)
        if not flag_student_list:
            print(student_list_from_teacher)
            break
        else:
            # 循环打印课程编号及列表
            for index_course, course_name_student in enumerate(student_list_from_teacher):
                print(f'当前学生编号:>>>{index_course}  当前学生名称:>>>{course_name_student}')
            break


# 修改学生分数
@common.auth('teacher')
def change_student_score():
    # （1） 先获取讲师课程下所有的学生姓名
    # （2） 选择要修改的学生
    while True:
        # （1） 获取当前老师下所有的课程
        # （1）调用讲师查看课程接口
        flag, teacher_course_list = teacher_interface.teacher_check_courses_interface(login_user_teacher['username'])
        if not flag:
            print(teacher_course_list)

        # 循环打印课程编号及列表
        for index_course, course_name in enumerate(teacher_course_list):
            print(f'当前课程编号:>>>{index_course}  当前课程名称:>>>{course_name}')

        # （2） 打印所有课程让老师选择
        choice_course = input('请输入选择的课程编号:>>>>').strip()

        if choice_course == 'q':
            break

        if not choice_course.isdigit():
            print(f'请确认输入的信息!!')
            continue

        choice_course = int(choice_course)

        if choice_course not in range(len(teacher_course_list)):
            flow = f'请输入正确的课程编号!!'
            continue

        # 开始调用讲师接口进行课程选择
        # 拿到选择的学校对应的课程的名字
        course_name = teacher_course_list[choice_course]

        # （3） 根据选择的课程获取对应的学生列表
        flag_student_list, student_list_from_teacher = teacher_interface.get_all_course_students(
            login_user_teacher['username'], course_name)
        if not flag_student_list:
            print(student_list_from_teacher)
            break

        # 循环打印学生编号及列表
        for index_student, student_name in enumerate(student_list_from_teacher):
            print(f'当前学生编号:>>>{index_student}  当前学生名称:>>>{student_name}')

        # （3） 修改学生分数
        # （2） 打印所有学生让老师选择
        choice_student = input('请输入选择的学生编号:>>>>').strip()

        if choice_student == 'q':
            break

        if not choice_student.isdigit():
            print(f'请确认输入的信息!!')
            continue

        choice_student = int(choice_student)

        if choice_student not in range(len(student_list_from_teacher)):
            flow = f'请输入正确的学生编号!!'
            continue

        # 开始调用讲师接口进行学生选择
        # 拿到对应的学生的名字
        student_name = student_list_from_teacher[choice_student]

        # 讲师输入要修改的学生分数
        score_student = input('请输入修改的学生分数:>>>>').strip()

        if not score_student:
            print(f'输入的分数不合法,请重新输入!!')
            continue

        score_student = int(score_student)

        if score_student < 0 or score_student >= 100:
            print(f'请确认你的修改分数,必须大于0小于等于100!!!')
            continue

        # （）调用讲师修改学生分数接口
        flag_change_score, msg_change_score = teacher_interface.change_student_score_interface(
            login_user_teacher['username'], course_name, student_name, score_student)
        if flag_change_score:
            print(msg_change_score)
            break


func_menus = '''
 ================欢迎使用选课系统==================
                    1.登陆
                    2.查看教授课程
                    3.选择教授课程
                    4.查看课程学生
                    5.修改学生分数
 =====================END=======================
'''

func_dict = {
    '1': login,
    '2': check_courses,
    '3': choose_course,
    '4': check_course_students,
    '5': change_student_score,
}


# 讲师视图主函数
def teacher_view():
    while True:
        print(func_menus)

        choice = input('请输入功能编号:>>>>>').strip()
        print('温馨提示:>>输入q退出')

        if choice == 'q':
            break

        # 对输入的字符做判断：是否属于数字/是否属于字典内的编号范围
        elif not choice.isdigit() or choice not in func_dict:
            print('>>>>请输入正确的编号!!<<<<')
            continue

        # 根据功能编号，调用对应的功能
        func_dict[choice]()
